#include "gateway_task.h"

// mqtt任务
void mqtt_task(void *pvParameters);
TaskHandle_t mqtt_task_handle = NULL;

extern void mqtt_reg_callback(messageHandler callback);
static void mqtt_callback(MessageData *msg_data);

// 任务开始
void gateway_task_start(void)
{
    // 注册回调函数
    mqtt_reg_callback(mqtt_callback);

    xTaskCreate(mqtt_task, "mqtt_task", 1024, NULL, 3, &mqtt_task_handle);
    // 启动调度器
    vTaskStartScheduler();
}

// 接受远程发送的MQTT消息 然后解析成为指令 再发送到串口在通过485发送给电机
void mqtt_callback(MessageData *msg_data)
{
    MQTTMessage *msg = msg_data->message; // 把msg_data中的消息（数据）赋值给msg
    printf("收到数据 !!!\r\n");
    // payloadlen表示长度 后者表示内容
    printf("%d:%s", msg->payloadlen, (char *)msg->payload);

    // 解析指令（用jcons字符串解析）
    cJSON *root = cJSON_ParseWithLength(msg->payload, msg->payloadlen); // 将字符串解析成json格式

    cJSON *msg_type = cJSON_GetObjectItem(root, "msg"); // 获取字符串转为json格式root中的msg等于的值

    if (!cJSON_IsString(msg_type)) // 判断msg是否是字符串
    {
        printf("msg_type is not string\n");
        cJSON_Delete(root);
        return;
    }
    printf("msg_type is %s\n", msg_type->valuestring);
    HAL_UART_Transmit(&huart2,msg_type->valuestring,1,1000);
    HAL_Delay(1000);
    printf("send OK\r\n");
    // if(strcmp(, "rs485") != 0)
    // {
    //     printf("msg is not rs485\n");
    //     cJSON_Delete(root);
    //     return;
    // }

    // 使用modebus发送指令给电机

    

    //  删除结构体
    cJSON_Delete(root);
}
void mqtt_task(void *pvParameters)
{
    W5500_init(); // 初始化W5500
    while (1)
    {
        MQTT_Receive();
        vTaskDelay(1000);
    }
}
